package com.jn.dao;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

public interface BaseMapper {
	
	@Select("select column_name from information_schema.columns where table_name = #{tableName }")
	Set<String> selectColNames(@Param("tableName")String tableName);
	
	@Select("select column_name,data_type from information_schema.columns where table_name = #{tableName }")
	List<Map<String,String>> selelctColNameVals(@Param("tableName")String tableName);
	
	Integer insert(@Param("param")Map<String,Object> param);
	
	Integer delete(@Param("param")Map<String,Object> param);
	
	Integer update(@Param("param")Map<String,Object> param);
	
	List<Map<String,Object>> selectByQuery(@Param("param")Map<String,Object> param);
	
	Integer selectCountByQuery(@Param("param")Map<String,Object> param);
	
	@Select("${sql}")
	List<Long> selectLongsSqlInject(@Param("sql") String sql);
	
	@Select("${sql}")
	List<Double> selectDoublesSqlInject(@Param("sql") String sql);
	
	@Select("${sql}")
	List<Integer> selectIntsSqlInject(@Param("sql") String sql);
	
	@Select("${sql}")
	List<String> selectStrsSqlInject(@Param("sql") String sql);
	
	@Select("${sql}")
	List<Map<String,Object>> selectEntitySqlInject(@Param("sql") String sql);
	
	@Select("${sql}")
	Integer selectIntSqlInject(@Param("sql") String sql);
	
	@Select("${sql}")
	String selectStrSqlInject(@Param("sql") String sql);
	
	@Select("${sql}")
	Boolean selectBooleanSqlInject(@Param("sql") String sql);
	
	@Select("${sql}")
	Date selectDateSqlInject(@Param("sql") String sql);
	
	@Select("${sql}")
	Long selectLongSqlInject(@Param("sql") String sql);
	
	@Select("${sql}")
	Double selectDoubleSqlInject(@Param("sql") String sql);
	
	@Update("${sql}")
	Integer updateSqlInject(@Param("sql") String sql);
	
	@Insert("${sql}")
	Integer insetSqlInject(@Param("sql") String sql);
	
	@Delete("${sql}")
	Integer delSqlInject(@Param("sql") String sql);
	
}
